////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: ParameterParser V1.1.4
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  moddualcamsyncv1.h
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef MODDUALCAMSYNCV1_H
#define MODDUALCAMSYNCV1_H

#include "parametermodule.h"
#include "parameterfilesymboltable.h"
#include "parametertypes.h"
#include "globalelements.h"
#include "awbglobalelements.h"

#define MODDUALCAMSYNCV1_NAMESPACE_BEGIN namespace moddualcamsyncv1 {
#define MODDUALCAMSYNCV1_NAMESPACE_END }

MODDUALCAMSYNCV1_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// dualcamSyncModeType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
enum class dualcamSyncModeType
{
    SYNCON  = 0,
    SYNCOFF = 1
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// dualcamRefPtConditiontype
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
enum class dualcamRefPtConditiontype
{
    AllConditions = 0,
    Outdoor       = 1,
    Indoor        = 2
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// dualcamRefPtSelecttype
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
enum class dualcamRefPtSelecttype
{
    UseBoth          = 0,
    UseRefPtOnly     = 1,
    UseCustRefPtOnly = 2
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// moddualcamSyncV1Level2Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct moddualcamSyncV1Level2Type
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerPt
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::triggerPointType         triggerPt;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerData - Array
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                   triggerDataCount;
    UINT32                   triggerDataID;
    awbglobalelements::awbTriggerDataFloatType* triggerData;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// moddualcamSyncV1Level1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct moddualcamSyncV1Level1Type
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerPt
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::triggerPointType            triggerPt;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerData - Array
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                      triggerDataCount;
    UINT32                      triggerDataID;
    moddualcamSyncV1Level2Type* triggerData;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// moddualcamSyncWeightFCMType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct moddualcamSyncWeightFCMType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerPt
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::triggerPointType            triggerPt;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerData - Array
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                      triggerDataCount;
    UINT32                      triggerDataID;
    moddualcamSyncV1Level1Type* triggerData;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// moddualcamSyncOutlierV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct moddualcamSyncOutlierV1Type
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerPt
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::triggerPointType            triggerPt;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerData - Array
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                      triggerDataCount;
    UINT32                      triggerDataID;
    moddualcamSyncV1Level2Type* triggerData;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// moddualcamSyncRefPtV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct moddualcamSyncRefPtV1Type
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// condition
    ///
    /// Tuning Level:  often_tune
    /// Description:   Select condition that this reference point will be enabled
    /// Default Value: AllConditions
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    dualcamRefPtConditiontype condition;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// calFactor
    ///
    /// Description:   select illuminant type for calibration
    /// Default Value: 3
    /// Range:         [0, 10]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32                     calFactor;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// point
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::awbPointDataType          point;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// moddualcamSyncCusRefPtV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct moddualcamSyncCusRefPtV1Type
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// luxThreshold
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   lux index for outdoor threshold
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                      luxThreshold;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// luxRange
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   Lux index range for scene change detection
    /// Default Value: 15
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                      luxRange;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// refPt - Array
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                     refPtCount;
    UINT32                     refPtID;
    moddualcamSyncRefPtV1Type* refPt;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixdualcamSyncV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixdualcamSyncV1Type
{
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Binary file symbol table entry ID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32 SymbolTableID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// moduleID
    ///
    /// Tuning Level:  never_tune
    /// Description:   Define module ID, sub module ID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::moduleIDType                 moduleID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// module_version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct module_versionStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;
        INT32 major_revision;
        INT32 minor_revision;
        INT32 incr_revision;
    } module_version;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// enableFlag
    ///
    /// Tuning Level:  must_tune
    /// Description:   module enable flag
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::enableFlagType               enableFlag;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// modeSelection
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   OFF: use slave own AWB result, ON: enable dualcam sync mode
    /// Default Value: SYNCON
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    dualcamSyncModeType          modeSelection;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// convSpeed
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   convergence speed in the section where slave camera starts to operate
    /// Default Value: 0.2
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                        convSpeed;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// refPtSelection
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   UseBoth: regular reference points + custom reference points, UseRefPtOnly: regular reference points only,
    ///                UseCustRefPtOnly: custom reference points only
    /// Default Value: UseBoth
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    dualcamRefPtSelecttype       refPtSelection;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// customRefPt
    ///
    /// Tuning Level:  often_tune
    /// Description:   define custom reference points added to improve slave decision accuracy
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    moddualcamSyncCusRefPtV1Type customRefPt;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// outlierDistance
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   define outlier distance to collect GCM valid stats
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    moddualcamSyncOutlierV1Type  outlierDistance;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// weightFCM
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   define mix ratio between FCM and GCM
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    moddualcamSyncWeightFCMType  weightFCM;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixdualcamSyncV1TypeClass
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class chromatixdualcamSyncV1TypeClass : public ParameterModule, public chromatixdualcamSyncV1Type
{
public:
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const UINT16 MAJOR = 1;
    static const UINT16 MINOR = 0;
    static const UINT32 PATCH = 0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Default Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixdualcamSyncV1TypeClass(
        const CHAR* name);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixdualcamSyncV1TypeClass(
        const CHAR* name,
        UINT32 modeId,
        UINT16 mode,
        UINT16 subMode,
        UINT32 group);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Destructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ~chromatixdualcamSyncV1TypeClass();

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// GetName
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const CHAR* GetName(
        const CHAR* type);


    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load moddualcamSyncV1Level2Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadmoddualcamSyncV1Level2Type(
        ParameterFileSymbolTableEntry* entry,
        moddualcamSyncV1Level2Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load moddualcamSyncV1Level1Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadmoddualcamSyncV1Level1Type(
        ParameterFileSymbolTableEntry* entry,
        moddualcamSyncV1Level1Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load moddualcamSyncWeightFCMType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadmoddualcamSyncWeightFCMType(
        ParameterFileSymbolTableEntry* entry,
        moddualcamSyncWeightFCMType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load moddualcamSyncOutlierV1Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadmoddualcamSyncOutlierV1Type(
        ParameterFileSymbolTableEntry* entry,
        moddualcamSyncOutlierV1Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load moddualcamSyncRefPtV1Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadmoddualcamSyncRefPtV1Type(
        ParameterFileSymbolTableEntry* entry,
        moddualcamSyncRefPtV1Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load moddualcamSyncCusRefPtV1Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadmoddualcamSyncCusRefPtV1Type(
        ParameterFileSymbolTableEntry* entry,
        moddualcamSyncCusRefPtV1Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixdualcamSyncV1Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixdualcamSyncV1Type(
        ParameterFileSymbolTableEntry* entry,
        chromatixdualcamSyncV1Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load module_versionStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmodule_versionStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatixdualcamSyncV1Type::module_versionStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload moddualcamSyncV1Level2Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadmoddualcamSyncV1Level2Type(
        moddualcamSyncV1Level2Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload moddualcamSyncV1Level1Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadmoddualcamSyncV1Level1Type(
        moddualcamSyncV1Level1Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload moddualcamSyncWeightFCMType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadmoddualcamSyncWeightFCMType(
        moddualcamSyncWeightFCMType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload moddualcamSyncOutlierV1Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadmoddualcamSyncOutlierV1Type(
        moddualcamSyncOutlierV1Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload moddualcamSyncCusRefPtV1Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadmoddualcamSyncCusRefPtV1Type(
        moddualcamSyncCusRefPtV1Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload chromatixdualcamSyncV1Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadchromatixdualcamSyncV1Type(
        chromatixdualcamSyncV1Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Parse symbol table entry, and return a new object
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ParameterModule* Parse(
        ParameterSetManager* manager,
        ParameterFileSymbolTableEntry* entry) const;

}; // End class chromatixdualcamSyncV1TypeClass

MODDUALCAMSYNCV1_NAMESPACE_END
#endif // MODDUALCAMSYNCV1_H

